//
//  MMWSmartLibrary.h
//  smartLibraryTest
//
//  Created by 雷琨 on 15/9/5.
//  Copyright (c) 2015年 miotlink. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MMWMiotLinkDeviceInfo : NSObject

@property(nonatomic, strong)NSString *ip;
@property(nonatomic, strong)NSString *mac;
@property(nonatomic, assign)uint16_t port;

@end

/**
 * mmw_MiotLinkConfig接口的结果block
 *
 * @param device 设备信息，失败为空
 */
typedef void(^mmw_MiotLinkConfigBlock)(MMWMiotLinkDeviceInfo *device);

/**
 * mmw_MiotLinkFirstConfig接口的结果block
 *
 * @param resultCode 结果信息，0成功，-1失败
 */
typedef void(^ mmw_MiotLinkFirstConfigBlock) (int resultCode);


/**
 * mmw_MiotLinkGetAllMacAndIP接口的结果block
 *
 * @param device 所有设备Mac和Ip信息，失败为空
 */
typedef void(^ mmw_MiotLinkGetAllMacAndIP) (NSArray *allMacAndIP);



/**
 * mmw_MiotLinkGetIP接口的结果block
 *
 * @param device 设备信息，失败为空
 */
typedef void(^ mmw_MiotLinkGetIPBlock) (MMWMiotLinkDeviceInfo *device);


@interface MMWMiotLink : NSObject

/**
 *  连接平台是否是正式服
 *
 *  @param isOfficialServer  默认为测试服务器，Yes为正式服，No为测试服
 */
@property(nonatomic,assign)BOOL isOfficialServer;

/**
 *  获取MMWSmartLibrary 的单例
 *
 *  @return 返回MMWSmartLibrary的单例
 */
+ (instancetype)shareInstence;

/**
 * 配置连接路由器
 *
 * @param routeSSid 路由器热点名称
 * @param password  路由器的密码
 *
 * @param configMode 配置模式
 *          1为旧版的smartConfig,
 *          2为smartConnect(7681)
 *          3为汉枫配置
 *          4为新版的smartConfig
 *          6为乐鑫配置
 *
 * @param time  超时时间，最小为60秒
 * @param callBack  结果回调
 *
 */
- (void)mmw_MiotLinkConfig:(NSString *)routeSSid
                  password:(NSString *)password
                configMode:(int)configMode
                      time:(int)time
                  callBack:(mmw_MiotLinkConfigBlock)callBack;

/**
 * ap配置
 *
 * @param routeSSid 路由器热点名称
 * @param password  路由器的密码
 *
 *
 * @param time  超时时间，最小为60秒
 * @param callBack  结果回调
 *
 */
- (void)mmw_apMiotLinkConfig:(NSString *)routeSSid
                  password:(NSString *)password
                      time:(int)time
                  callBack:(mmw_MiotLinkConfigBlock)callBack;



/**
 * 汉枫及乐鑫配置设备信息
 *
 * @param device 设备相关信息
 *
 * @param serial 串口的配置信息，为空则不配置串口信息
 * @param time  超时时间，最小为40秒
 * @param callBack  结果回调
 *
 */
- (void)mmw_HFMiotLinkFirstConfig:(MMWMiotLinkDeviceInfo *)device
                         serial:(NSString *)serial
                           time:(int)time
                       callBack:(mmw_MiotLinkFirstConfigBlock)callBack;


/**
 * 配置设备信息
 *
 * @param device 设备相关信息
 *
 * @param userPlatformMode 用户平台配置模式
 *          0：不配置用户平台信息,
 *          1：设备为TCP服务器端，
 *             参数userPlatformPort不能为空
 *          2：设备以TCP方式连接客户服务器，
 *             参数userPlatformURL，userPlatformPort不能为空
 *          4：设备以UDP方式连接客户服务器，
 *             参数userPlatformURL，userPlatformPort不能为空
 *
 * @param userPlatformURL 用户平台URL，2，4模式下不能为空
 * @param userPlatformPort 用户平台端口，不能为空
 * @param serial 串口的配置信息，为空则不配置串口信息
 * @param time  超时时间，最小为40秒
 * @param callBack  结果回调
 *
 */
- (void)mmw_MiotLinkFirstConfig:(MMWMiotLinkDeviceInfo *)device
               userPlatformMode:(int)userPlatformMode
                userPlatformURL:(NSString *)userPlatformURL
               userPlatformPort:(NSString *)userPlatformPort
                         serial:(NSString *)serial
                           time:(int)time
                       callBack:(mmw_MiotLinkFirstConfigBlock)callBack;




/**
 * 获取所有设备的mac地址和IP地址
 *
 * @param SearchTime  搜索时间
 * @param callBack 结果回调
 */
- (void)mmw_MiotLinkGetAllMacAndIPSearchTime:(int)SearchTime
                                    callBack:(mmw_MiotLinkGetAllMacAndIP)callBack;


/**
 *  停止配置（包含获取设备IP）
 */
- (void)mmw_MiotLinkStopLink;

/**
 * 把要发送的串口数据编码成待发送的数据
 *
 * @param userBinaryData 串口数据
 *
 * @return 待发送的数据
 */
- (NSData *)encodeSendDataByUserBinaryData:(NSString *)userBinaryData;

/**
 * 把收到的数据解码成串口数据
 *
 * @param receiveData 收到的数据
 *
 * @return userBinaryData
 */
- (NSString *)decodeUserBinaryDataFromReceiveData:(NSData *)receiveData;

@end
